package com.esbi.projectwebsocket.threadLocal;

import java.util.Random;

public class ThreadLocalExample {

    // 创建一个 ThreadLocal 对象，用于存储每个线程的唯一标识符
    // ThreadLocal 可以为每个线程提供独立的变量副本，确保不同线程之间的数据隔离
    private static final ThreadLocal<Integer> threadId = new ThreadLocal<>();

    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(() -> {
                // 为每个线程生成一个唯一的标识符
                int id = new Random().nextInt(100);
                // 使用 set 方法将生成的标识符存储到当前线程的 ThreadLocal 变量中
                threadId.set(id);

                // 打印当前线程的标识符
                System.out.println("线程 " + Thread.currentThread().getName() + " 的标识符为：" + threadId.get());
                // 使用 get 方法获取当前线程的 ThreadLocal 变量的值

                try {
                    // 模拟线程执行一些任务
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                // 在线程结束时，移除 ThreadLocal 变量，避免内存泄漏
                // 如果不及时移除，可能会导致在某些情况下内存占用过高
                threadId.remove();
            }).start();
        }
    }
}